import axios from 'axios';
import QS from 'qs';

// http request 拦截器
axios.interceptors.request.use(
  (config: any) => {
    // 获取 token 值，若不存在，则为空
    const token = sessionStorage.getItem('TOKEN') || '';
    // 给请求头中拼接 token 参数
    config.headers = {
      ...config.headers,
      token,
    };
    // if(token){
    //   config.params = {'token':token}
    // }
    return config;
  },
  (error: any) => {
    return Promise.reject(error);
  },
);


// http response 拦截器
// axios.interceptors.response.use(
//   response => {
//     if(response.data.errCode ==2) {
//       router.push({
//         path:"/login",
//         querry:{redirect:router.currentRoute.fullPath}  //从哪个页面跳转
//       })
//     }
//     return response;
//   },
//   error => {
//     return Promise.reject(error)
//   }
// )

/**
 * x-www-form-urlencoded 格式 post 请求
 * @param {*} url 请求路径
 * @param {*} param 请求参数
 */
async function postForm(url: string, param: any) {
  // 设置请求参数格式
  const config = {
    'content-type': 'application/x-www-form-urlencoded',
  };
  // 将参数由对象转换为formData格式
  const paramStr = QS.stringify(param);
  return await requestHandel('post', config, url, paramStr);
}
/**
 * json 格式 post 请求
 * @param {*} url 请求路径
 * @param {*} param 请求参数
 */
async function postJson(url: string, param: any) {
  // 设置请求参数格式
  const config = {
    'content-type': 'application/json',
  };
  return await requestHandel('post', config, url, param);
}
/**
 * get 请求
 * @param {*} url  请求路径
 */
async function get(url: string) {
  return await requestHandel('get', {}, url, {});
}
/**
 * 请求处理
 * @param {*} method 请求类型
 * @param {*} config 请求头内的一些默认设置
 * @param {*} url 请求路径
 * @param {*} data 请求参数
 */
async function requestHandel(method: string, config = {}, url: string, data = {}) {
  try {
    const requestJson = await axios(`${
      {
        method,
        url,
        data,
        herders: {
          ...config,
        },
      }
    }`);
    return requestJson.data;
  } catch (error) {
    console.log('网络请求异常');
  }
}

export {
  postForm,
  postJson,
  get,
};
